#ifndef __PROCESS_H__
#define __PROCESS_H__

#include <sys/types.h>
#include <sys/ipc.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include "cJSON.h"

#define SIZE 4096

// 上报数据类型
union val_t
{
    int b_val;    // bool类型存储空间
    int i_val;    // 整形值存储空间
    float f_val;  // 浮点值存储空间
    char str[32]; // 字符串类型存储空间
};

// 标准数据点结构体
typedef struct std_node
{
    int key;             // 唯一键值
    int type;            // 数据点类型
    char name[32];       // 数据点名称
    union val_t old_val; // 变化上报后需要更新旧值
    union val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;             // 默认为-1，采集成功后设置为0，采集失败再置-1
} std_node_t;

// 消息队列结构体
typedef struct msg
{
    long mtype;       // 消息类型
    std_node_t data; // 消息正文
} msg_t;

int creat_key();                                          // 创建关键字
std_node_t *creat_shm(int *shmid);                        // 创建共享内存，建立映射关系
int creat_msg();                                          // 创建消息队列
int send_msg(int msgid, long type, std_node_t *object);   // 添加并发送消息
int recv_msg(int msgid, msg_t *msg, long type, int flag); // 接收消息

#endif